package com.chinatechstar.component.commons.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @ClassName:ValidateUtils
 * @功能：
 * @author：wlei
 * @日期：2022/7/24-02:13
 **/
public class ValidateUtils {

    /**
     * 检查 email输入是否正确 正确的书写格 式为 username@domain
     *
     * @param value
     * @return
     */
    public static boolean checkEmail(String value, int length) {
        return value.matches("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*")
            && value.length() <= length;
    }

    public static boolean checkMobile(String str) {
        Pattern p = null;
        Matcher m = null;
        boolean b = false;
        p = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$"); // 验证手机号
        m = p.matcher(str);
        b = m.matches();
        return b;
    }

    /**
     * 电话号码验证
     *
     * @param str
     * @return 验证通过返回true
     */
    public static boolean checkTel(String str) {
        Pattern p1 = null, p2 = null;
        Matcher m = null;
        boolean b = false;
        p1 = Pattern.compile("^[0][1-9]{2,3}-?[0-9]{5,10}$"); // 验证带区号的
        p2 = Pattern.compile("^[1-9]{1}[0-9]{5,8}$"); // 验证没有区号的
        if (str.length() > 9) {
            m = p1.matcher(str);
            b = m.matches();
        } else {
            m = p2.matcher(str);
            b = m.matches();
        }
        return b;
    }

    /**
     * 验证年龄0-120
     *
     * @param value
     * @return
     */
    public static boolean checkAge(String value) {
        return value.matches("120|((1[0-1]|\\d)?\\d)");
    }


    /**
     * 检查字符串是 否含有HTML标签
     *
     * @param value
     * @return
     */

    public static boolean checkHtmlTag(String value) {
        return value.matches("<(\\S*?)[^>]*>.*?</\\1>|<.*? />");
    }

    /**
     * 检查URL是 否合法
     *
     * @param value
     * @return
     */
    public static boolean checkURL(String value) {
        return value.matches("[a-zA-z]+://[^\\s]*");
    }

    /**
     * 检查IP是否 合法
     *
     * @param value
     * @return
     */
    public static boolean checkIP(String value) {
        return value.matches("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");
    }

    ///**
    // * 检查ID是否 合法，开头必须是大小写字母，其他位可以有大小写字符、数字、下划线
    // *
    // * @param value
    // * @return
    // */
    //public static boolean checkID(String value) {
    //    return value.matches("[a-zA-Z][a-zA-Z0-9_]{4,15}{1");
    //}

    /**
     * 检查QQ是否 合法，必须是数字，且首位不能为0，最长15位
     *
     * @param value
     * @return
     */

    public static boolean checkQQ(String value) {
        return value.matches("[1-9][0-9]{4,13}");
    }

    /**
     * 检查邮编是否 合法
     *
     * @param value
     * @return
     */
    public static boolean checkPostCode(String value) {
        return value.matches("[1-9]\\d{5}(?!\\d)");
    }

    /**
     * 检查身份证是 否合法,15位或18位
     *
     * @param value
     * @return
     */
    public static boolean checkIDCard(String value) {
        return value.matches("\\d{15}|\\d{18}");
    }

    /**
     * 检查输入是否 超出规定长度 Java教程:http://www.javaweb.cc
     *
     * @param length
     * @param value
     * @return
     */
    public static boolean checkLength(String value, int length) {
        return ((value == null || "".equals(value.trim())) ? 0 : value.length()) <= length;
    }

    /**
     * 检查是否为空 字符串,空：true,不空:false
     *
     * @param value
     * @return
     */
    public static boolean checkNull(String value) {
        return value == null || "".equals(value.trim());
    }

    /**
     * 检查车牌号 否合法
     *
     * @param value
     * @return
     */
    public static boolean checkCarPlate(String value) {
        return value.matches("^[\u4e00-\u9fa5]{1}[A-Z]{1}[A-Z_0-9]{4}[\u4e00-\u9fa5_A-Z_0-9]{1}$");
    }

    /**
     * 必须字母加数字
     *
     * @param value
     * @return
     */
    public static boolean checkNumAndLetter(String value) {
        String regex = "^[A-Za-z0-9]+$";
        boolean bo = value.matches(regex);
        return bo;
    }
}
